#ifndef __FLIGHT_H__
#define __FLIGHT_H__

/**
 * 逻辑结构 双向循环链表
 * 存储结构 链式存储
 * 功能 : 用于实现对航班信息 的增 删 改 查 判空 清空 销毁 排序 文件写入  文件读取
 */

// 引入头文件
#include "head.h"

// 数据对象
typedef struct f_data
{
    int id; 					    //航班班次
    char flighttype[20] ;		//飞机机型
    char startcity[20] ; 		//航班起点站
    char arrivecity[20] ; 		//航班终点站
    int starttime[2];  			//起飞时间 时:分
    int arrivetime[2] ; 		//到达时间 时:分
    char flytime[20] ;			//飞行时间
    int value ;  				//票价
    int maxNUM ; 				//额定载客量
    int leftbuyersa ; 			//剩余座位数量
    char whetherfly  ;			//是否起飞 ‘y’ ‘n’
}f_data;

// 航班信息节点 - 双向循环链表
typedef struct f_node
{
    f_data data;
    struct f_node * prev;
    struct f_node * next;
}f_node;
// 航班信息头结点
typedef struct f_list
{
    struct f_node * next;
}f_list;


// 数据操作
void flight_data_file_print(f_list *list);      //  向文件写入航班信息
void flight_data_file_scanf(f_list* list);      //  向文件读取航班信息

int get_circulate_node_count(f_list *list);


// 双向链表的创建
f_list* init_double_link_list();

// 双向链表的插入
void insert_double_node(f_list* list, f_data data, int pos);

// 双向链表的删除
void delete_double_node(f_list *list, int pos);

// 双向链表的查找
f_node* find_double_node_pos(f_list* list, int id);
f_node* find_double_node_name(f_list* list, char* name);

// 双向链表的遍历
void print_forward_double_link_list(f_list* list);
void print_backwards_double_link_list(f_list* list);
// 双向链表的判空
int is_empty_double_link_list(f_list* list);

// 双向链表的清空
void clear_double_link_list(f_list* list);

// 双向链表的合并
f_list* merge_double_link_lists(f_list* list1, f_list* list2);

// 双向链表的销毁
void free_double_link_list(f_list** list);

#endif // __FLIGHT_H__
